import 'package:flutter/material.dart';
import 'package:english_words/english_words.dart';

////  LikeListDemoApp Test

class LikeListDemoApp extends StatelessWidget {
	@override
	Widget build(BuildContext context) {
		return new MaterialApp(
			title: 'Startup Name Generator',
			theme: new ThemeData(
				primaryColor: Colors.white,
			),
			home: new LikeListDemo(),
		);
	}
}

class LikeListDemo extends StatefulWidget {
	@override
	createState() => new LikeListDemoState();
}

class LikeListDemoState extends State<LikeListDemo> {
	final _suggestions = <WordPair>[];

	final _saved = new Set<WordPair>();

	final _biggerFont = const TextStyle(fontSize: 18.0);

	@override
	Widget build(BuildContext context) {
		return new Scaffold(
			appBar: new AppBar(
				title: new Text('Startup Name Generator'),
				actions: <Widget>[
					new IconButton(icon: new Icon(Icons.list), onPressed: _pushSaved)
				],
			),
			body: _buildSuggestions(),
		);
	}

	Widget _buildSuggestions() {
		return new ListView.builder(
			padding: const EdgeInsets.all(16.0),
			itemBuilder: (context, i) {
				if (i.isOdd) return new Divider();

				final index = i ~/ 2;
				if (index >= _suggestions.length) {
					_suggestions.addAll(generateWordPairs().take(10));
				}
				return _buildRow(_suggestions[index], i);
			},
		);
	}

	Widget _buildRow(WordPair pair, index) {
		final alreadySaved = _saved.contains(pair);
		return new ListTile(
			title: new Text(
				pair.asPascalCase + index.toString(),
				style: _biggerFont,
			),
			trailing: new Icon(
				alreadySaved ? Icons.favorite : Icons.favorite_border,
				color: alreadySaved ? Colors.red : null,
			),
			onTap: () {
				setState(
						() {
						if (alreadySaved) {
							_saved.remove(pair);
						} else {
							_saved.add(pair);
						}
					},
				);
			},
		);
	}

	void _pushSaved() {
		Navigator.of(context).push(
			new MaterialPageRoute(
				builder: (context) {
					final tiles = _saved.map(
							(pair) {
							return new ListTile(
								title: new Text(
									pair.asPascalCase,
									style: _biggerFont,
								),
							);
						},
					);
					final divided = ListTile.divideTiles(
						context: context,
						tiles: tiles,
					).toList();

					return new Scaffold(
						appBar: new AppBar(
							title: Center(child: new Text('Saved Suggestions')),
						),
						body: new ListView(children: divided),
					);
				},
			),
		);
	}
}